Jump to content

All Activity

This stream auto-updates

  1. Today
  2. Buenos días o tardes; PRIMEROS BOCETOS; (Estoy trabajando con @Lopess por lo que si tenéis sugerencias , críticas ,dudas etc..., haced se las a él también) -Cartago; Disculpen las molestias* Axum: Disculpen las molestias*
  3. One of the aggravating A24 changes. I really want to change this back or at least rename the files to something map makers will recognize easier.
  4. No sorry busy day ^^"
  5. Hey ! Did you find something ? My exams are tomorrow and Friday so I'll be back on this after my exams
  6. UpdateColor() { // warn("UpdateColor"); // let cmpFoundationOwnership = Engine.QueryInterface(this.entity, IID_Ownership); // let owner = cmpFoundationOwnership.GetOwner(); // if (cmpFoundationOwnership) // { // cmpFoundationOwnership.SetOwner(owner); // } // warn("Entity : " + this.entity + "Owner : " + owner) // var owner = Engine.QueryInterface(this.entity, IID_Ownership).GetOwner(); const cmpPlayer = QueryOwnerInterface(this.entity, IID_Player); let owner = Engine.QueryInterface(this.entity, IID_Ownership).GetOwner(); warn("Entity : " + this.entity + "Owner : " + owner); let cmpVisual = Engine.QueryInterface(this.entity, IID_Visual); if (!cmpVisual) return; if (cmpPlayer) { const color = cmpPlayer.GetColor(); cmpVisual.SetVariable("colorr", color.r); cmpVisual.SetVariable("colorg", color.g); cmpVisual.SetVariable("colorb", color.b); } // warn("red : "+color.r); // warn("green : "+color.g); // warn("blue : "+color.b); } I think it doesn't get the good color untli the building is finally constructed, so that's why it applies the gaia color. But how to collect the owner of a building before its construction ? Something that I don't understand is that I call all the messages during the construction, it should be good but it's not
  7. ARABIA ii. The Sasanians and Arabia Within a few years after the commencement of Ardašir I’s (r. ca. 224-242) program of conquest, the Sasanians undertook military engagements in both northeastern Arabia and Oman. In the late Sasanian period, they conquered Yemen Aden (see ABNĀʾ). Generally, however, the Sasanians seem to have exercised political control in Arabia via their Arab clients. According to Ṭabari and Ebn al-Aṯir, who copied him, Ardašir campaigned around 240 in Bahrain (Ṭabari, I/2, p. 820; tr., p. 15; Ebn al-Aṯir, I, p. 384); in Oman, Bahrain, and Yamāma (Dinavari, p. 45; tr., p. 69); or “in the country which lies between” Oman, Bahrain, Yamāma, and Hajar (Nehāyat al-erab, fol. 92b, apud Widengren). His adversary was a king in Bahrain named Sanaṭroq (Ṭabari, Dinavari, Nehāyat al-erab,) and a king in Oman named ʿAmr b. Wāqed Ḥemyari (Nehāyat al-erab, fol. 92b, apud Widengren). The Nehāyat al-erab elaborates further, suggesting that unnamed Arab kings wrote to Asʿad b. ʿAmr, king of Yemen, informing him of Ardašir’s attack, and that Asʿad marched with an army of 100,000 including “inhabitants of Tahāma, and those kings who were there among the descendants of Nezār b. Maʿadd and Fehr b. Mālek and Qalammas b. ʿĀmer b. Żāreb” (tr. Piacentini, 1985, p. 63). After killing the kings of Bahrain and Oman in battle, Ardašir is said to have sent a message to Asʿad b. ʿAmr with an offer of peace and confirmation of his continued rule in Yemen; a promise was extended also to the kings of the Hejaz (northwestern Arabia) and Tahāma (coastal southwestern Arabia). After this, Ardašir is said to have returned to Eṣṭaḵr (Nehāyat al-erab, fol. 92b, apud Widengren). The historicity of either a very pointed campaign by Ardašir against Bahrain (understood as the northeast Arabian mainland, rather than the island of the same name; see Wüstenfeld, pp. 175-97) or a more extensive one that took in the entire region between Oman and the modern Hofuf oasis (Hajar) has been discussed by scholars since 1879, when Theodor Nöldeke published his translation of that part of Ṭabari which deals with the history of the Sasanians and the Arabs. Whereas some scholars (e.g., Altheim and Stiehl; Widengren, p. 755) have dismissed it as a confusion with Ardašir’s conquest of Hatra in northern Iraq (based on the graphic similarity between Hatra in Syriac and Ḥaṭṭā, the name of the coastal strip in northeastern Arabia), others (e.g., Piacentini, 1984; idem, 1985, pp. 64 ff.; Potts, 1985, p. 89; Daryaee, in Šahrestānīhā ī Ērānšahr, p. 54) have accepted the conquest of eastern Arabia and Oman as plausible, even if the part of the story recounted in the Nehāyat al-erab about Nezār b. Maʿadd, Fehr b. Mālek, and Qalammas b. ʿĀmer embodies “some legendary embellishments and an intentionally epic tone” (Piacentini, 1985, p. 66). One wonders what motivation Ardašir could possibly have had for launching an attack on eastern Arabia. The answer perhaps lies in the often discussed and equally contentious Parthian or Characene presence (Potts, 1985, p. 89; idem, 1988; idem, 1997) in eastern Arabia, and possibly in the alleged involvement of Arabs (tāzigān) and people from Mazun (mazunigān, i.e., Omanis) “who [inhabit] on the [Arabian] shore of the [Persian] Gulf” in the army of Haftānboḵt (q.v.), who was defeated by Ardašir in coastal Fars, according to the Kār-nāmak ī Arsašīr ī Pābagān (sec. 7.12; Asha, p. 33; Bosworth notes that the name “is probably a misrendering of an Achaemenid term for an administrative district, denoting a component part of a province”; see Ṭabari, tr., p. 10, n. 32). In any case, one indication that an Arabian campaign may have taken place is provided by the eighth-century Šahrestānīhā ī Ērānšahr (sec. 52), according to which Ardašir “appointed Ōšag of Hagar as margrave (over the) Dō-sar and Bor-gil by the wall of the Arabs” (Daryaee, in Šahrestānīhā, p. 20). Moreover, Ṭabari says that, in Bahrain, Ardašir founded a new city called Fasā (?) Ardašīr or “the city of al-Ḵaṭṭ” (cf. Syriac Ḥaṭṭā, noted above; Ṭabari, p. 820; tr, p. 16, n. 64; Nöldeke, 1879, p. 20; Frye, 1983, p. 167 and note 3, suggesting instead Pērōz Ardašir, i.e., “victorious [is] Ardašir”). According to Yāqut (V, p. 122, apud Lammens), Ardašir established the Azd, an important tribal group in Oman, at Šehr on the Hadramawt coast (Lammens, p. 398; Potts, 2008, p. 198). Indirect confirmation of Sasanian control over Mazun in the reign of Ardašir is provided by Šāpūr I’s inscription at Kaʿba-ye Zardošt at Naqš-e Rostam near Persepolis, which includes it as one of his provinces (sec. 3.17). The likelihood that it was inherited by Šāpūr from a prior conquest of his father’s is strong, considering the fact that Šāpur himself is never said to have campaigned there (Potts, 2008, p. 200). According to the Šahrestānīhā ī Ērānšahr (sec. 25), Ḥira, near Kufa, was established by Šāpūr I, and this has been taken by some scholars as an indication that the Lakhmid dynasty there, who later functioned as Sasanian vassals charged with policing the Arab population of northern Arabia, was established at this time (e.g., Rothstein p. 44; Retsö, p. 481). Thereafter the Laḵmids functioned in much the same fashion as the Ghassanids did in northwestern Arabia for the Byzantine state (Nöldeke, 1888; Shahid, pp. 3-46). A Sasanian presence on the borders of Hadramawt may have been the motivation behind an embassy sent by Šammar Yuharʿiš, king of Sabaʾ, Ḏu Raydan, Hadramawt, and Yamnat, to Ctesiphon in the early 4th century, perhaps on the occasion of the birth of Šāpūr II (Potts, 2008, p. 202). If so, this diplomatic gesture was a success, for when Šāpūr II launched a vicious assault on northern Arabia in 325, he is said by Ṯaʿālebi not to have advanced as far as Yemen “because the kings of this country were his clients” (Widengren, p. 731). According to Ṭabari, the impetus for the campaign was a series of attacks by Arabs from northeastern Arabia “who looked on Fars as their pastureland” (Ṭabari, I/2, pp. 838-39; tr., pp. 54-55; Nöldeke, 1879, p. 53). These prompted Šāpūr II to cross the Persian Gulf to Ḥaṭṭ; advance through Bahrain and Hajar, slaughtering many tribes (Tamim, Bakr b. Wāʾel, ʿAbd-al-Qays) as he went; destroy wells in Yamāma; and advance as far as Medina. Šāpūr deported some Tamim tribesmen to Kerman and Ahvaz (Nöldeke, 1879, p. 233), piercing their shoulder blades and binding them, for which, according to several Arab writers, he was termed Ḏo’l-aktāf, “lord of the shoulders” (Ḥamza, pp. 51-52; tr. pp. 49-50; Ḵᵛārazmi, pp. 102-3; tr., p. 102; Nöldeke, 1879, p. 57, n. 2; Christensen, p. 235, n.2). Aside from interactions with their Lakhmid vassals, there is subsequently little evidence of direct Sasanian involvement in Arabia until the reign of Ḵosrow I Anušervān (r. 531-79). According to Ṭabari, during the reign of Justin II (r. 565-78), Sayf b. Ḏi Yazan Ḥemyari sought Byzantine assistance in expelling Ethiopian forces from Yemen (cf. the discussion in Rubin, pp. 192 ff.), but when he was rebuffed, he turned instead to the Lakhmid ruler Noʿmān b. Monḏer, Ḵosrow’s governor of Ḥira, and eventually to Ḵosrow. One account has it that an expeditionary force of 800 prisoners awaiting execution were sent out under a commander named Vahrez (a title: cf. Procopius, De Bello Persico 1.12.10; Dinavari, p. 65, tr. p. 92: Vahrez, son of Kāmjār; his real name may have been something like Ḵozrad Narsis, according to Omani oral tradition recorded by Miles, pp. 423-24; see also Justi, p. 340; Nöldeke, 1879, p. 223, n. 2) to conquer Yemen (Ṭabari, I/2, pp. 945-49; tr., pp. 235-41 and n. 591; Balʿami, pp. 1021-34; Dinavari, pp. 65-66; tr., pp. 91-93; Maqdesi, III, pp. 188-94; tr., III, pp. 532-36; Nöldeke, 1879, pp. 220 ff.). Also, earlier in his account, Ṭabari says that Ḵosrow sent an army of Daylamites, who “killed the Abyssinian Masruq in Yemen and remained there” (I/2, p. 899, tr., p. 160). An entirely different account is given by Theophanes of Byzantium, according to whom the Sasanian campaign was led by a general named Miranes (i.e., Mehrān, see Müller, p. 271; cf. Gignoux et al., pp. 99-100) against an Ethiopian king named Sanatourkes (Rubin, p. 190; there is evident confusion here with the Sanaṭroq of Bahrain defeated by Ardašir). Several contradictory sources date the death of Masruq to the 30th year of the Prophet Moḥammad (i.e., 582, thus Ḥamza, p. 136) or the 45th year of Kosrow's life, i.e., 575-76 (Masʿudi, sec. 1019; Ḥāji Ḵalifa, apud Fell, p. 46,). The yaum al-mošaqqar, which describes the ambush by Arab tribes of a caravan sent by Vahrez to Kosrow I, may reflect the tradition related by Ṭabari of the substantial booty forwarded to the Sasanian king that had been seized when the army entered Ṣanʿā (Potts, 2008, p. 207). Ṭabari also recounts the return of Vahrez to Ḵosrow, preceded by the installation of a Sasanian client, one Sayf b. Ḏi Yazan, charged with collecting taxes, “which he was to send to Kisrā annually as fixed sums” (I/2, pp. 949-50, tr. pp. 241-42). In another version of the story, Sayf was assassinated, and the Abyssinians returned to power, prompting Vahrez to lead a second expedition and re-conquer Yemen, where he remained as viceroy, a position held by his son Marzbān, grandson and great-grandson, until one Bāḏān was appointed governor. Bāḏān is said to have ruled until the coming of Islam (Ṭabari, I/2, pp. 957-58; tr., pp. 251-52; Nöldeke, 1879, pp. 236-37). These accounts, however, appear to conflate expeditions sent out by Ḵosrow I (the original one) and Ḵosrow II Parvēz (the later re-conquest). Probably related to the earlier campaign was the establishment of the fort at Rostāq in the interior of Oman (cf. rōstāg, the Mid. Pers. term for an administrative division), known as Borj Kesrā b. Šerwan, and the tradition, relayed in the Omani history known as the Ḵašf al-ḡomma, that “The Persian monarchs used to send persons who had incurred their displeasure or whom they feared to their army in ‘Omán” (Ross, p. 118). Like the Lakhmids in the north, the Jolandā rulers of Oman functioned as Sasanian vassals (Wilkinson, 1975). Despite four centuries of interaction, however, relatively little archeological evidence of the Sasanian presence has been found anywhere in eastern Arabia (coins: Potts and Cribb; Potts, 2010; metalwork: Potts, 1993; weaponry: Potts, 1997b; ceramics: Kennet). A few examples of Sasanian glass with cut and polished decoration have been found in Yemen (Whitehouse, p. 11, citing examples illustrated in Roux, p. 209), and a carved column capital from the Hadramawt has been compared with Sasanian architectural decoration (Keall, 1998). https://iranicaonline.org/articles/arabia-ii-sasanians-and-arabia
  8. Yesterday
  9. PR for the edits of ALL the trees: https://github.com/TheShadowOfHassen/0-ad-history-encyclopedia-mod/pull/147
  10. Can you push it in the branch of the mod git so I can take a look tomorrow ?
  11. If I put this in OnGlobalOwnershipChanged it doesn't work anymore, the color is not updated. The wallset.js in kind of empty to be honest, and I can't find another file attached to walls. Moreover, I don't understand why i've got a good preview (with the good color) with my wall tower but not with my other building (spacedock) I'll see this tomorrow I take a break
  12. Could be macs overheating, if you have adapters you could try to play with ethernet cables. I have seen wifi problems with macs before:
  13. if (msg.ent === this.entity) this.UpdateColor(); I meant doing this in OnGlobalOwnershipChanged the global functions are called for every unit anytime anything changes. It's a bit better than OnUpdate but it still isn't great for performance. I suppose it triggers one of the global functions and causes the old buildings to reupdate. I didn't know you were using wals, there might be something different in Wall.js or Wallset.js
  14. Here is the "final" version of my UpdateColor function : UpdateColor() { const cmpPlayer = QueryOwnerInterface(this.entity, IID_Player); let owner = Engine.QueryInterface(this.entity, IID_Ownership).GetOwner(); warn("Entity : " + this.entity + "Owner : " + owner); let cmpVisual = Engine.QueryInterface(this.entity, IID_Visual); if (!cmpVisual) return; if (cmpPlayer) { const color = cmpPlayer.GetColor(); cmpVisual.SetVariable("colorr", color.r); cmpVisual.SetVariable("colorg", color.g); cmpVisual.SetVariable("colorb", color.b); } } OnOwnershipChanged(msg) { if (msg.to == INVALID_PLAYER) return; this.UpdateColor(); } OnGlobalOwnershipChanged(msg) { if (msg.to == INVALID_PLAYER) return; this.UpdateColor(); } OnEntityRenamed(msg) { if (msg.to == INVALID_PLAYER) return; this.UpdateColor(); } OnHealthChanged(msg) { if (msg.to == INVALID_PLAYER) return; this.UpdateColor(); } OnGlobalInitGame(msg) { if (msg.to == INVALID_PLAYER) return; this.UpdateColor(); } When I build a large wall (Tower + Wall + Tower), the particles of the first tower is gaia colored. When the wall is constructed, the first tower particles turns player colored. The third tower stays gaia colored since I build something else. I don't understand how is this possible to be honest
  15. Ok but how to use it ? I tried this but it makes the code not working again (does nothing without error) OnOwnershipChanged(msg) { warn("OwnershipChanged"); if (msg.to == INVALID_PLAYER) return; if (msg.ent) this.UpdateColor(); // warn("OwnershipChangedUpdateColor"); } And will it be really useful ? I mean is the problem comes from this or not ? + I don't know if my last post was clear after reading it :/
  16. You can filter the entity // msg data is {"entity": ent, "from": playerId, "to": playerId}
  17. You can't since you cannot reach that screen. You can disable persistent match settings or delete the matchsettings file too. i wonder if enabling a mod might work too
  18. This sounds like the regicide + garrison hero infinite loop. If that's the case, it may be fixed by getting the community mod in the mod downloader, but you could also turn off the garrison option in match setup. @Norse_Harold is more familiar.
  19. I have played this game for a long time, and for the first time tried a regicide match. Immediately after, I went to start a single-player game and got "Loading map data. Please wait." Doesn't resolve after more than an hour. Deleted and reinstalled the game and seeing the same problem. I saw some advice to delete the matchsettings.json, but I cannot find this anywhere. I'm on a Mac. Any insights much appreciated!
  20. Ok I think I found something interesting. I found this message in Player.js : Player.prototype.OnGlobalOwnershipChanged = function(msg) { if (msg.from != this.playerID && msg.to != this.playerID) return; let cmpCost = Engine.QueryInterface(msg.entity, IID_Cost); if (msg.from == this.playerID) { if (cmpCost) this.popUsed -= cmpCost.GetPopCost(); let panelIndex = this.panelEntities.indexOf(msg.entity); if (panelIndex >= 0) this.panelEntities.splice(panelIndex, 1); let barterIndex = this.barterEntities.indexOf(msg.entity); if (barterIndex >= 0) this.barterEntities.splice(barterIndex, 1); } if (msg.to == this.playerID) { if (cmpCost) this.popUsed += cmpCost.GetPopCost(); let cmpIdentity = Engine.QueryInterface(msg.entity, IID_Identity); if (!cmpIdentity) return; if (MatchesClassList(cmpIdentity.GetClassesList(), panelEntityClasses)) this.panelEntities.push(msg.entity); if (cmpIdentity.HasClass("Barter") && !Engine.QueryInterface(msg.entity, IID_Foundation)) this.barterEntities.push(msg.entity); } }; It's always called when you build something so I decided to test this in ParticlePlayer.js : OnGlobalOwnershipChanged(msg) { if (msg.to == INVALID_PLAYER) return; this.UpdateColor(); } And it works ! The building switch from gaia to player color during the building or when it's constructed BUT the UpdateColor function is being called 3-4 times every 5 seconds, which can be a problem ? I don't know + I understood how it works : Everytime I build something, the previous building is being Color updated. It means that if un build a large wall (with two towers), only the first tower will be color updated. To update the second one, I have to build another building
  21. Hello everyone, For a few days/weeks, when we play with two with AI (on network or LAN), several messages appear "Loss of connection" and the game freezes. After 10 seconds of connection loss, the game automatically stops and the entire game is lost for both players. We both have new generation MACs. We tried to adjust several parameters (TLS encryption disabled, drop in world population, drop in graphics, etc.) but nothing works. Do you have a solution to offer us? Thank you very much in advance... Because of this problem we can no longer play our favorite game...
  22. Ok, I like the looks of this approximation: (from https://stackoverflow.com/questions/4930307/fastest-way-to-get-the-integer-part-of-sqrtn/63457507#63457507 and https://stackoverflow.com/questions/34187171/fast-integer-square-root-approximation) #include <algorithm> #include <array> #include <iostream> #include <string> #include <vector> #include <math.h> #include <time.h> unsigned char bit_width(unsigned long long x) { return x == 0 ? 1 : 64 - __builtin_clzll(x); } unsigned sqrt_lo(const unsigned n) noexcept { unsigned log2floor = bit_width(n) - 1; return (unsigned) (n != 0) << (log2floor >> 1); } unsigned sqrt_newton(const unsigned n, unsigned int P) { unsigned a = sqrt_lo(n); unsigned b = n; // compute unsigned difference while (std::max(a, b) - std::min(a, b) > P*P) { //P*P reduces iterations of while loop when using higher P. //printf("iteration\n"); b = n / a; a = (a + b) / 2; } // a is now either floor(sqrt(n)) or ceil(sqrt(n)) // we decrement in the latter case // this is overflow-safe as long as we start with a lower bound guess return a - (a * a > n); //could remove - (a * a > n); if using low precision. } int main() { unsigned Nums[29] = {27,28,29,30,31,32,33,34,35,36,37,38,39,40,44,45,46,47,48,58,59,60,61,62,98,99,100,101,102}; int P = 5; clock_t tStart = clock(); printf("Range value\tEstimate\tExact\n"); for (int i=0;i<29;i++){ unsigned test = Nums[i]*Nums[i]; printf("%i\t",Nums[i]); printf("%i\t",sqrt_newton(test,P)/P); printf("%i\n",(int)floor(sqrt(test))/P); } //printf("Estimate: %i\t",sqrt_newton(test)/P); //printf("Exact: %i\n",(int)floor(sqrt(test))/P); printf("Time: %.9fs\n", (double)(clock() - tStart)/CLOCKS_PER_SEC); } results: P = 1 P = 3: P = 5 P = 10: The only issue I found is that with 5 >= P >= 9, there are a couple points where the estimate is higher than estimates of larger ranges. (see P = 5) I could just go ahead and use this and see what happens. (id have to figure out the windows build process first).
  23. The x-axis of the right chart is time. The frames are ordered chronologically. The right chart are the frames ordered by time. No I only tested it with multiplayer with a single client that worked. I also get OOS with multiple clients when entering the command during a game. It worked when entering the command during the loadscreen. In a replay the turnlength is the same as in the game it came from.
  24. You can download the files from the repository https://trac.wildfiregames.com/browser/ps/trunk/binaries/data/mods/public/art/textures/cursors change them, and put them in a mod of your own.
  1. Load more activity
×
×
  • Create New...